#pragma once

#include <list>
// Interface of Game Logic World 
struct IGLObjBase;
struct IGLWorld
{
public:
	virtual IGLObjBase* CreateObj(int nType,int nPositionX=0,int nPositionY=0,int nPositionZ=0)=0;
	virtual int DestoryObj(IGLObjBase* pOjb)=0;
	virtual int PutInsideWorld(IGLObjBase* pOjb)=0;
};

struct IGLObjBase
{
public:
	virtual void SetPosition(int nPositionX=0,int nPositionY=0,int nPositionZ=0)=0;
	virtual int GetPositionX()=0;
	virtual int GetPositionY()=0;
	virtual int GetPositionZ()=0;
	virtual int TimeEscape(double fMillionSecond)=0;
};

struct IGDKObjIDGen
{
	virtual int GetNextObjID()=0;
};

extern IGDKObjIDGen* g_pGDKIDGenerator;
#define GetGDKOBJID g_pGDKIDGenerator->GetNextObjID
typedef std::list< IGLObjBase * > GLPObjList;
typedef std::list< IGLObjBase * >::iterator GLPObjListItr;
